/*******************************************************************************
 * Copyright 2010 Simon Mieth
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/

package org.kabeja.dxf.parser.table;

import org.kabeja.dxf.parser.DXFValue;
import org.kabeja.entities.Viewport;
import org.kabeja.util.Constants;


/**
 * @author <a href="mailto:simon.mieth@gmx.de">Simon Mieth</a>
 *
 */
public class DXFVPortTableHandler extends AbstractTableHandler {
    public final static int GROUPCODE_VPORT_NAME = 2;
    public final static int GROUPCODE_VPORT_LOWER_LEFT_X = 10;
    public final static int GROUPCODE_VPORT_LOWER_LEFT_Y = 20;
    public final static int GROUPCODE_VPORT_UPPER_RIGHT_X = 11;
    public final static int GROUPCODE_VPORT_UPPER_RIGHT_Y = 21;
    public final static int GROUPCODE_VPORT_CENTER_POINT_X = 12;
    public final static int GROUPCODE_VPORT_CENTER_POINT_Y = 22;
    public final static int GROUPCODE_VPORT_SNAP_BASE_POINT_X = 13;
    public final static int GROUPCODE_VPORT_SNAP_BASE_POINT_Y = 23;
    public final static int GROUPCODE_HEIGHT = 40;
    public final static int GROUPCODE_ASPECT_RATIO = 41;
    private Viewport viewport;

    /* (non-Javadoc)
     * @see de.miethxml.kabeja.parser.table.DXFTableHandler#endParsing()
     */
    public void endParsing() {
        doc.addViewport(viewport);
    }

    /* (non-Javadoc)
     * @see de.miethxml.kabeja.parser.table.DXFTableHandler#getTableKey()
     */
    public String getTableType() {
        return Constants.TABLE_KEY_VPORT;
    }

    /* (non-Javadoc)
     * @see de.miethxml.kabeja.parser.table.DXFTableHandler#parseGroup(int, de.miethxml.kabeja.parser.DXFValue)
     */
    public void parseGroup(int groupCode, DXFValue value) {
        switch (groupCode) {
        case GROUPCODE_VPORT_NAME:
            viewport.setViewportID(value.getValue());

            if ("*active".equals(value.getValue().toLowerCase())) {
                viewport.setActive(true);
            }

            break;

        case GROUPCODE_VPORT_CENTER_POINT_X:
            viewport.getCenterPoint().setX(value.getDoubleValue());

            break;

        case GROUPCODE_VPORT_CENTER_POINT_Y:
            viewport.getCenterPoint().setY(value.getDoubleValue());

            break;

        case GROUPCODE_VPORT_LOWER_LEFT_X:
            viewport.getLowerLeftCorner().setX(value.getDoubleValue());

            break;

        case GROUPCODE_VPORT_LOWER_LEFT_Y:
            viewport.getLowerLeftCorner().setY(value.getDoubleValue());

            break;

        case GROUPCODE_HEIGHT:
            viewport.setHeight(value.getDoubleValue());

            break;

        case GROUPCODE_ASPECT_RATIO:
            viewport.setAspectRatio(value.getDoubleValue());

            break;
        }
    }

    /* (non-Javadoc)
     * @see de.miethxml.kabeja.parser.table.DXFTableHandler#startParsing()
     */
    public void startParsing() {
        viewport = new Viewport();
    }
}
